package cn.sharesdk.onekeyshare;

import android.content.Context;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.View;

import com.mob.tools.FakeActivity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.ShareSDK;

public class PlatformListFakeActivity extends FakeActivity {
  protected HashMap<String, Object> shareParamsMap;
  protected boolean silent;
  protected ArrayList<CustomerLogo> customerLogos;
  protected HashMap<String, String> hiddenPlatforms;
  protected View backgroundView;
  protected OnShareButtonClickListener onShareButtonClickListener;
  protected boolean dialogMode = false;
  protected ThemeShareCallback themeShareCallback;
  private boolean canceled = false;

  public void onCreate() {
    super.onCreate();

    canceled = false;

    if (themeShareCallback == null) {
      finish();
    }
  }

  public boolean onKeyEvent(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
      canceled = true;
    }
    return super.onKeyEvent(keyCode, event);
  }

  protected void setCanceled(boolean canceled) {
    this.canceled = canceled;
  }

  public boolean onFinish() {

    // 取消分享菜单的统计
    if (canceled) {
      ShareSDK.logDemoEvent(2, null);
    }

    return super.onFinish();
  }

  @Override public void show(Context context, Intent i) {
    super.show(context, i);
  }

  public HashMap<String, Object> getShareParamsMap() {
    return shareParamsMap;
  }

  public void setShareParamsMap(HashMap<String, Object> shareParamsMap) {
    this.shareParamsMap = shareParamsMap;
  }

  public boolean isSilent() {
    return silent;
  }

  public void setSilent(boolean silent) {
    this.silent = silent;
  }

  public ArrayList<CustomerLogo> getCustomerLogos() {
    return customerLogos;
  }

  public void setCustomerLogos(ArrayList<CustomerLogo> customerLogos) {
    this.customerLogos = customerLogos;
  }

  public HashMap<String, String> getHiddenPlatforms() {
    return hiddenPlatforms;
  }

  public void setHiddenPlatforms(HashMap<String, String> hiddenPlatforms) {
    this.hiddenPlatforms = hiddenPlatforms;
  }

  public View getBackgroundView() {
    return backgroundView;
  }

  public void setBackgroundView(View backgroundView) {
    this.backgroundView = backgroundView;
  }

  public OnShareButtonClickListener getOnShareButtonClickListener() {
    return onShareButtonClickListener;
  }

  public void setOnShareButtonClickListener(OnShareButtonClickListener onShareButtonClickListener) {
    this.onShareButtonClickListener = onShareButtonClickListener;
  }

  public boolean isDialogMode() {
    return dialogMode;
  }

  public void setDialogMode(boolean dialogMode) {
    this.dialogMode = dialogMode;
  }

  public ThemeShareCallback getThemeShareCallback() {
    return themeShareCallback;
  }

  public void setThemeShareCallback(ThemeShareCallback themeShareCallback) {
    this.themeShareCallback = themeShareCallback;
  }

  protected void onShareButtonClick(View v, List<Object> checkedPlatforms) {

    if (onShareButtonClickListener != null) {
      onShareButtonClickListener.onClick(v, checkedPlatforms);
    }

    HashMap<Platform, HashMap<String, Object>> silentShareData =
        new HashMap<Platform, HashMap<String, Object>>();
    final List<Platform> supportEditPagePlatforms = new ArrayList<Platform>();

    Platform plat;
    HashMap<String, Object> shareParam;
    for (Object item : checkedPlatforms) {
      if (item instanceof CustomerLogo) {
        CustomerLogo customerLogo = (CustomerLogo) item;
        customerLogo.listener.onClick(v);
        continue;
      }

      plat = (Platform) item;
      String name = plat.getName();

      // EditPage不支持微信平台、Google+、QQ分享、Pinterest、信息和邮件，总是执行直接分享
      if (silent || ShareCore.isDirectShare(plat)) {
        shareParam = new HashMap<String, Object>(shareParamsMap);
        shareParam.put("platform", name);
        silentShareData.put(plat, shareParam);
      } else {
        supportEditPagePlatforms.add(plat);
      }
    }
    if (silentShareData.size() > 0) {
      themeShareCallback.doShare(silentShareData);
    }

    // 跳转EditPage分享
    if (supportEditPagePlatforms.size() > 0) {
      showEditPage(supportEditPagePlatforms);
    }

    finish();
  }

  protected void showEditPage(List<Platform> platforms) {
    showEditPage(getContext(), platforms);
  }

  public void showEditPage(Context context, Platform platform) {
    ArrayList<Platform> platforms = new ArrayList<Platform>(1);
    platforms.add(platform);
    showEditPage(context, platforms);
  }

  protected void showEditPage(Context context, List<Platform> platforms) {
    EditPageFakeActivity editPageFakeActivity;
    String editPageClass = ((Object) this).getClass().getPackage().getName() + ".EditPage";
    try {
      editPageFakeActivity = (EditPageFakeActivity) Class.forName(editPageClass).newInstance();
    } catch (Exception e) {
      e.printStackTrace();
      return;
    }

    editPageFakeActivity.setBackgroundView(backgroundView);
    editPageFakeActivity.setShareData(shareParamsMap);
    editPageFakeActivity.setPlatforms(platforms);
    if (dialogMode) {
      editPageFakeActivity.setDialogMode();
    }
    editPageFakeActivity.showForResult(context, null, new FakeActivity() {
      public void onResult(HashMap<String, Object> data) {
        if (data == null) return;
        if (data.containsKey("editRes")) {
          @SuppressWarnings("unchecked") HashMap<Platform, HashMap<String, Object>> editRes =
              (HashMap<Platform, HashMap<String, Object>>) data.get("editRes");
          themeShareCallback.doShare(editRes);
        }
      }
    });
  }

  public interface OnShareButtonClickListener {
    void onClick(View v, List<Object> checkPlatforms);
  }
}
